View Javadoc
1 /* 2 Java Regular Expressions Plugin API 3 4 Copyright (C) 2002 Jose San Leandro Armend?riz 5 jsanleandro@yahoo.es 6 chousz@yahoo.com 7 8 This library is free software; you can redistribute it and/or 9 modify it under the terms of the GNU Lesser General Public 10 License as published by the Free Software Foundation; either 11 version 2.1 of the License, or (at your option) any later version. 12 13 This library is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 Lesser General Public License for more details. 17 18 You should have received a copy of the GNU Lesser General Public 19 License along with this library; if not, write to the Free Software 20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 22 Thanks to ACM S.L. for distributing this library under the LGPL license. 23 Contact info: jsr000@terra.es 24 Postal Address: c/Playa de Lagoa, 1 25 Urb. Valdecaba?as 26 Boadilla del monte 27 28660 Madrid 28 Spain 29 30 This library uses some external APIs. So far I haven't released such 31 APIs as projects themselves, but you should be able 32 to download them from the web page where you got this source code. 33 34 ****************************************************************************** 35 * 36 * Filename: $RCSfile: RegexpManager.java,v $ 37 * 38 * Author: Jose San Leandro Armend?riz 39 * 40 * Description: Generic central class that manages which regexp engine 41 * to use. 42 * 43 * Last modified by: $Author: chous $ at $Date: 2003/06/21 21:07:25 $ 44 * 45 * File version: $Revision: 1.12 $ 46 * 47 * Project version: $Name: $ 48 * ("Name" means no concrete version has been checked out) 49 * 50 * $Id: RegexpManager.java,v 1.12 2003/06/21 21:07:25 chous Exp $ 51 * 52 */ 53 package org.acmsl.regexpplugin; 54 55 /* 56 * Importing project-specific classes. 57 */ 58 import org.acmsl.regexpplugin.Compiler; 59 import org.acmsl.regexpplugin.Matcher; 60 import org.acmsl.regexpplugin.RegexpEngineNotFoundException; 61 62 /* 63 * Importing some ACM classes. 64 */ 65 import org.acmsl.version.Version; 66 import org.acmsl.version.Versionable; 67 import org.acmsl.version.VersionFactory; 68 69 /*** 70 * Generic class that manages which regexp engine to use. 71 * @author <a href="mailto:jsanleandro@yahoo.es" 72 >Jose San Leandro Armend?riz</a> 73 * @version $Revision: 1.12 $ 74 */ 75 public final class RegexpManager 76 implements Versionable 77 { 78 /*** 79 * Engine name position in the array object. 80 */ 81 protected static final int NAME = 0; 82 83 /*** 84 * Engine version position in the array object. 85 */ 86 protected static final int ENGINE_VERSION = 1; 87 88 /*** 89 * Engine class package position in the array object. 90 */ 91 protected static final int PACKAGE = 2; 92 93 /*** 94 * Compiler position in the array object. 95 */ 96 protected static final int COMPILER = 3; 97 98 /*** 99 * Match result position in the array object. 100 */ 101 protected static final int MATCHER = 4; 102 103 /*** 104 * Helper result position in the array object. 105 */ 106 protected static final int HELPER = 5; 107 108 /* 109 * Engine list Jakarta Oro. 110 */ 111 /*** 112 * Jakarta Oro Perl5 113 */ 114 private static final String[] JAKARTA_ORO_PERL5 = 115 new String[] 116 { 117 "Jakarta Oro Perl 5", 118 "2.0.6", 119 "org.apache.oro.text.perl", 120 "org.acmsl.regexpplugin.jakartaoro.Perl5CompilerOROAdapter", 121 "org.acmsl.regexpplugin.jakartaoro.Perl5MatcherOROAdapter", 122 "org.acmsl.regexpplugin.jakartaoro.HelperOROAdapter" 123 }; 124 125 /*** 126 * Jakarta Oro Awk 127 * @deprecated Awk engine is not working correctly! 128 */ 129 private static final String[] JAKARTA_ORO_AWK = 130 new String[] 131 { 132 "Jakarta Oro Awk", 133 "2.0.6", 134 "org.apache.oro.text.awk", 135 "org.acmsl.regexpplugin.jakartaoro.AwkCompilerOROAdapter", 136 "org.acmsl.regexpplugin.jakartaoro.AwkMatcherOROAdapter", 137 "org.acmsl.regexpplugin.jakartaoro.HelperOROAdapter" 138 }; 139 140 /*** 141 * Jakarta Regexp 142 */ 143 private static final String[] JAKARTA_REGEXP = 144 new String[] 145 { 146 "Jakarta Regexp", 147 "1.2", 148 "org.apache.regexp", 149 "org.acmsl.regexpplugin.jakartaregexp.CompilerRegexpAdapter", 150 "org.acmsl.regexpplugin.jakartaregexp.MatcherRegexpAdapter", 151 "org.acmsl.regexpplugin.jakartaregexp.HelperRegexpAdapter" 152 }; 153 154 /*** 155 * JDK1.4 156 */ 157 private static final String[] JDK14_REGEXP = 158 new String[] 159 { 160 "JDK1.4 Regular Expresions", 161 "1.4", 162 "java.util.regex", 163 "org.acmsl.regexpplugin.jdk14regexp.CompilerJDKAdapter", 164 "org.acmsl.regexpplugin.jdk14regexp.MatcherJDKAdapter", 165 "org.acmsl.regexpplugin.jdk14regexp.HelperJDKAdapter" 166 }; 167 168 /*** 169 * GNU Regexp 170 */ 171 private static final String[] GNU_REGEXP_114 = 172 new String[] 173 { 174 "GNU Regexp", 175 "1.1.4", 176 "gnu.regexp", 177 "org.acmsl.regexpplugin.gnuregexp.CompilerGNUAdapter", 178 "org.acmsl.regexpplugin.gnuregexp.MatcherGNUAdapter", 179 "org.acmsl.regexpplugin.gnuregexp.HelperGNUAdapter" 180 }; 181 182 /*** 183 * Singleton instance. 184 */ 185 private static RegexpManager m__Singleton; 186 187 /*** 188 * Private reference to the engine type. 189 */ 190 private String[] m__astrEngine = JAKARTA_ORO_PERL5; 191 192 /*** 193 * Private constructor to avoid accidental instantiation. 194 */ 195 private RegexpManager() {}; 196 197 /*** 198 * Common method to retrieve the singleton object. 199 * @return the singleton instance. 200 */ 201 private static RegexpManager getInstance() 202 { 203 RegexpManager result = m__Singleton; 204 205 if (m__Singleton == null) 206 { 207 m__Singleton = new RegexpManager(); 208 209 result = m__Singleton; 210 } 211 212 return result; 213 } 214 215 /*** 216 * Retrieves current engine information. 217 * @return the engine information. 218 */ 219 protected String[] getEngine() 220 { 221 return m__astrEngine; 222 } 223 224 /*** 225 * Sets the current engine. 226 * @param engine the engine information. 227 */ 228 protected void setEngine(String[] engine) 229 { 230 m__astrEngine = engine; 231 } 232 233 /*** 234 * Sets Jakarta ORO Perl5 implementation to be the engine used. 235 */ 236 public static void useJakartaOroPerl5() 237 { 238 getInstance().useJakartaOroPerl5Engine(); 239 } 240 241 /*** 242 * Sets Jakarta ORO Perl5 implementation to be the engine used. 243 */ 244 private void useJakartaOroPerl5Engine() 245 { 246 setEngine(JAKARTA_ORO_PERL5); 247 } 248 249 /*** 250 * Sets Jakarta ORO Awk implementation to be the engine used. 251 * @deprecated Awk engine is not working correctly! 252 */ 253 public static void useJakartaOroAwk() 254 { 255 getInstance().useJakartaOroAwkEngine(); 256 } 257 258 /*** 259 * Sets Jakarta ORO Awk implementation to be the engine used. 260 * @deprecated Awk engine is not working correctly! 261 */ 262 private void useJakartaOroAwkEngine() 263 { 264 setEngine(JAKARTA_ORO_AWK); 265 } 266 267 /*** 268 * Sets Jakarta Regexp implementation to be the engine used. 269 */ 270 public static void useJakartaRegexp() 271 { 272 getInstance().useJakartaRegexpEngine(); 273 } 274 275 /*** 276 * Sets Jakarta Regexp implementation to be the engine used. 277 */ 278 private void useJakartaRegexpEngine() 279 { 280 setEngine(JAKARTA_REGEXP); 281 } 282 283 /*** 284 * Sets JDK1.4 regexp implementation to be the engine used. 285 */ 286 public static void useJDK14Regexp() 287 { 288 getInstance().useJDK14RegexpEngine(); 289 } 290 291 /*** 292 * Sets JDK1.4 regexp implementation to be the engine used. 293 */ 294 private void useJDK14RegexpEngine() 295 { 296 setEngine(JDK14_REGEXP); 297 } 298 299 /*** 300 * Sets GNU Regexp implementation to be the engine used. 301 */ 302 public static void useGNURegexp() 303 { 304 getInstance().useGNURegexpEngine(); 305 } 306 307 /*** 308 * Sets GNU Regexp implementation to be the engine used. 309 */ 310 private void useGNURegexpEngine() 311 { 312 setEngine(GNU_REGEXP_114); 313 } 314 315 /*** 316 * Creates a new compiler. 317 * @return the new compiler. 318 * @throws RegexpEngineNotFoundException whenever the instantiation 319 * of the engine classes fails. 320 */ 321 public static Compiler createCompiler() 322 throws RegexpEngineNotFoundException 323 { 324 return createSpecificCompiler(getInstance().getEngine()); 325 } 326 327 /*** 328 * Creates a new helper instance. 329 * @return such kind of object. 330 * @throws RegexpEngineNotFoundException whenever the instantiation 331 * of the engine classes fails. 332 */ 333 public static Helper createHelper() 334 throws RegexpEngineNotFoundException 335 { 336 return createSpecificHelper(getInstance().getEngine()); 337 } 338 339 /*** 340 * Creates a compiler determined by given class name. 341 * @param className the class name of the compiler. 342 * @return the compiler object, or null if the class name is incorrect. 343 * @throws RegexpEngineNotFoundException whenever the instantiation 344 * of the engine classes fails. 345 */ 346 protected static Compiler createSpecificCompiler(String[] engine) 347 throws RegexpEngineNotFoundException 348 { 349 Compiler result = null; 350 351 try 352 { 353 result = (Compiler) Class.forName(engine[COMPILER]).newInstance(); 354 } 355 catch (Exception exception) 356 { 357 System.err.println("Compiler instantiation error."); 358 359 exception.printStackTrace(System.err); 360 361 throw 362 new RegexpEngineNotFoundException( 363 engine[NAME], 364 engine[ENGINE_VERSION], 365 engine[PACKAGE], 366 engine[COMPILER], 367 engine[MATCHER], 368 engine[HELPER]); 369 } 370 371 return result; 372 } 373 374 /*** 375 * Creates a compiler determined by given class name. 376 * @param className the class name of the compiler. 377 * @return the compiler object, or null if the class name is incorrect. 378 * @throws RegexpEngineNotFoundException whenever the instantiation 379 * of the engine classes fails. 380 */ 381 protected static Helper createSpecificHelper(String[] engine) 382 throws RegexpEngineNotFoundException 383 { 384 Helper result = null; 385 386 try 387 { 388 result = (Helper) Class.forName(engine[HELPER]).newInstance(); 389 } 390 catch (Exception exception) 391 { 392 System.err.println("Compiler instantiation error."); 393 394 exception.printStackTrace(System.err); 395 396 throw 397 new RegexpEngineNotFoundException( 398 engine[NAME], 399 engine[ENGINE_VERSION], 400 engine[PACKAGE], 401 engine[COMPILER], 402 engine[MATCHER], 403 engine[HELPER]); 404 } 405 406 return result; 407 } 408 409 /*** 410 * Creates a new pattern matcher. 411 * @return the new matcher. 412 * @throws RegexpEngineNotFoundException whenever the instantiation 413 * of the engine classes fails. 414 */ 415 public static Matcher createMatcher() 416 throws RegexpEngineNotFoundException 417 { 418 return createSpecificMatcher(getInstance().getEngine()); 419 } 420 421 /*** 422 * Creates a matcher determined by given class name. 423 * @param className the class name of the matcher. 424 * @return the matcher object, or null if the class name is incorrect. 425 * @throws RegexpEngineNotFoundException whenever the instantiation 426 * of the engine classes fails. 427 */ 428 private static Matcher createSpecificMatcher(String[] engine) 429 throws RegexpEngineNotFoundException 430 { 431 Matcher result = null; 432 433 try 434 { 435 result = (Matcher) Class.forName(engine[MATCHER]).newInstance(); 436 } 437 catch (Exception exception) 438 { 439 System.out.println(exception.toString()); 440 441 exception.printStackTrace(System.err); 442 443 throw 444 new RegexpEngineNotFoundException( 445 engine[NAME], 446 engine[ENGINE_VERSION], 447 engine[PACKAGE], 448 engine[COMPILER], 449 engine[MATCHER], 450 engine[HELPER]); 451 } 452 453 return result; 454 } 455 456 /*** 457 * Concrete version object updated everytime it's checked-in in a CVS 458 * repository. 459 */ 460 public static final Version VERSION = 461 VersionFactory.createVersion("$Revision: 1.12 $"); 462 463 /*** 464 * Retrieves the current version of this object. 465 * @return the version object with such information. 466 */ 467 public Version getVersion() 468 { 469 return VERSION; 470 } 471 472 /*** 473 * Retrieves the current version of this class. 474 * @return the object with class version information. 475 */ 476 public static Version getClassVersion() 477 { 478 return VERSION; 479 } 480 }

This page was automatically generated by Maven